import {getRequest} from "./api";

// 定义一个方法，参数1 表示router对象 ，参数2 store 对象（保存路由）
export const initMenu = (router, store) => {
  // 判断 store 中是否保存有路由信息
  if (store.state.routes.length > 0) {
    // 如果有，则直接返回
    return;
  }
  // 获取用户路由菜单
  getRequest("/system/config/menu").then(data => {
    // 如果有返回数据
    if (data) {
      // 由于后端过来的数据格式不正确。在前端路由中，component 需要的是一个实例对象，而后端传过来的则是字符串，因此我们需要对 component 属性进行转换，可以采用路由懒加载的方式实现。
      // 对路由数据进行转换
      // 将处理好的数据添加到 router 中
      let fmtRoutes = formatRoutes(data);
      router.addRoutes(fmtRoutes);
      // 同时将数据保存到 store 中，参数1 表示 store 方法的名字，参数2 表示传入的参数
      store.commit('initRoutes',fmtRoutes);
      store.dispatch('connect')
    }
  })
};

// 路由数据转换方法
export const formatRoutes = (routes) => {
  // 全部处理好数据格式的数据
  let fmRoutes = [];
  // 对原始路由数据进行遍历
  routes.forEach(router => {
    // 只需要后端返回的部分路由数据，通过赋值的方式获取
    let {
      path,
      component,
      name,
      meta,
      iconCls,
      children
    } = router;
    // 判断 children 属性是否为空，并且 是否是 Array 对象
    if (children && children instanceof Array) {
      // 满足条件，说明是一级目录，通过递归的方式继续遍历二级目录
      children = formatRoutes(children);
    }
    // 单个处理数据转换
    let fmRouter = {
      path: path,
      name: name,
      iconCls: iconCls,
      meta: meta,
      children: children,
      // 以上的数据都不需要进行任何处理，主要处理 component 属性,通过动态懒加载的方式加载
      component(resolve) {
        // startsWith() 方法用于检测字符串是否以指定的前缀开始。
        if (component.startsWith("Home")) {
          // 参数1 表示加载的路径，参数2 传入的参数
          require(['../views/' + component + '.vue'], resolve);
        } else if (component.startsWith("Emp")) {
          require(['../views/emp/' + component + '.vue'], resolve);
        } else if (component.startsWith("Per")) {
          require(['../views/per/' + component + '.vue'], resolve);
        } else if (component.startsWith("Sal")) {
          require(['../views/sal/' + component + '.vue'], resolve);
        } else if (component.startsWith("Sta")) {
          require(['../views/sta/' + component + '.vue'], resolve);
        } else if (component.startsWith("Sys")) {
          require(['../views/sys/' + component + '.vue'], resolve);
        }
      }
    };
    // 将处理好的数据 push 到 fmRoutes
    fmRoutes.push(fmRouter);
  });
  return fmRoutes;
};